package br.com.esporte.view.site.grupo.comunidade.regra;

import java.util.ArrayList;
import java.util.List;

import org.apache.wicket.markup.html.link.Link;

import br.com.esporte.exception.ViewException;
import br.com.esporte.model.Grupo;
import br.com.esporte.model.Regra;
import br.com.esporte.persistence.filter.FiltroRegra;
import br.com.esporte.view.infra.generic.Pagina;
import br.com.esporte.view.site.component.listaRegra.ListRegraComponent;
import br.com.esporte.view.site.component.menu.menuTopo.MenuTopo;
import br.com.esporte.view.site.component.menu.menuTopo.MenuTopoComponente;
import br.com.esporte.view.site.grupo.comunidade.PaginaComunidade;

/**
 * 
 * @author Milton Domingues
 *
 */
public class PaginaListarRegra extends PaginaComunidade {

	private static final String LIST_REGRA_ID = "listRegra";
	private static final String LIST_MENUS_TOPO_ID = "menuTopo";

	private List<Regra> regras;

	public PaginaListarRegra(Grupo grupo) {
		super(grupo);
	}

	@Override
	public void carregarView() {
		super.carregarView();
		FiltroRegra filtro = new FiltroRegra();
		filtro.addEquals(FiltroRegra.GRUPO, getGrupo());
		List<Regra> regras = getFachada().consultar(filtro);
		setRegras(regras);
	}

	private ListRegraComponent criarContainerListRegra(final Grupo grupo){
		ListRegraComponent regras = new ListRegraComponent(LIST_REGRA_ID, getRegras()){
			private static final long serialVersionUID = -8375584403470249051L;
			@Override
			public void acaoEditar(Regra regra) {
				setResponsePage(new PaginaCriarRegra(grupo, regra));
			}
			@Override
			public boolean habilitarEdicao() {
				return isModerador();
			}
		};
		return regras;
	}

	private MenuTopoComponente criarMenuTopo(){
		return new MenuTopoComponente(LIST_MENUS_TOPO_ID, getMenusTopo(), getGrupo().getTipo());
	}

	private List<MenuTopo> getMenusTopo(){
		List<MenuTopo> list = new ArrayList<MenuTopo>();

		Link<Pagina> event1 = new Link<Pagina>(MenuTopoComponente.LINK_MENU_ID) {

			private static final long serialVersionUID = 6408049973489553594L;

			@Override
			public void onClick() {
				try{
					setResponsePage(new PaginaListarRegra(getGrupo()));
				}catch (ViewException e) {
					redirectViewException(e);
				}
			}
		};
		list.add(new MenuTopo(event1, "Listar regras"));

		if(isModerador()){
			Link<Pagina> event2 = new Link<Pagina>(MenuTopoComponente.LINK_MENU_ID) {

				private static final long serialVersionUID = 6408049973489553594L;

				@Override
				public void onClick() {
					try{
						setResponsePage(new PaginaCriarRegra(getGrupo()));
					}catch (ViewException e) {
						redirectViewException(e);
					}
				}
			};
			list.add(new MenuTopo(event2, "Criar regras"));
		}

		return list;
	}

	public List<Regra> getRegras() {
		return regras;
	}

	@Override
	public String getTipoEsporte() {
		return getGrupo().getTipo().getCodigo();
	}

	@Override
	public void montarPagina() {
		super.montarPagina();
		addContainer(criarMenuTopo());
		addContainer(criarContainerListRegra(getGrupo()));
	}

	public void setRegras(List<Regra> regras) {
		this.regras = regras;
	}

	@Override
	public void validarView() {
		super.validarView();
		if((getRegras() == null) || (getRegras().size() == 0)){
			throw new ViewException("Nenhuma regra registrada!");
		}
	}

	@Override
	public boolean viewPublica() {
		return true;
	}

}
